#include "../../common/detail.hpp"
#include "../../client/rpc_client.hpp"


void callback(const Json::Value &result) {
    ILOG("callback result: %d", result.asInt());
}

/*
由于调用了muduo库的send()接口，muduo库的文件描述符是非阻塞的，
所以我这个call就会直接返回，继续去执行下面的代码，等到事情就绪了再去执行onresponse()

辅助获得异步结果，就是call已经执行完成了，
但是结果还没有拿到，在执行call的过程中将一个回调方法封装一个promise交给requstor，在执行onResponse的时候回调该回调方法利用
promise设置结果，最后用future获取结果


直接传一个回调方法，在执行call的过程中将一个callback1封装该回调方法，交给requstor，在执行onResponse的时候回调该callback1封装的
回调方法，这个回调方法需要一个Json::Value的参数

*/



int main()
{
    bitrpc::client::RpcClient client(false, "127.0.0.1", 9090);

    Json::Value params, result;
    params["num1"] = 11;
    params["num2"] = 22;
    bool ret = client.call("Add", params, result); /* 阻塞式，会在call处阻塞   利用同步send+异步send获取结果 */
    if (ret != false) {
        ILOG("result: %d", result.asInt());
    }

    bitrpc::client::RpcCaller::JsonAsyncResponse res_future;
    params["num1"] = 33;
    params["num2"] = 44;
    ret = client.call("Add", params, res_future);/* 非阻塞式，直接返回ret true 利用传cb的send*/
    if (ret != false) {
        result = res_future.get();
        ILOG("result: %d", result.asInt());
    }

    params["num1"] = 55;
    params["num2"] = 66;
    ret = client.call("Add", params, callback);/* 非阻塞式，直接返回ret true，会先打印---- 利用传cb的send*/
    DLOG("-------\n");
    std::this_thread::sleep_for(std::chrono::seconds(1));
    return 0;
}